一般公開されたAWS Service Catalogを試してみた
ウィスキー、シガー、パイプをこよなく愛する大栗です。
昨夜開催されたAWS Summit NewYorkでAWS Service Catalogの一般公開されました。昨年のre:Inventで発表されて以来、個人的に心待ちにしていたサービスなので早速試してみました。
AWS Service Catalog ?
AWS Service Catalogは、昨年11月に開催されたre:Invent 2014で発表されたサービスで、以下のような機能を提供するサービスです。
- IT管理部門向けには、CloudFormationのテンプレートとして管理されるAWSリソース定義や、これらの利用権限をカタログとして一元管理する機能を提供します。
- ユーザ部門ではIT管理部門が作成したカタログより、求める機能に応じたAWS環境を必要に応じて起動する事が可能となります。
Service Catalogの利点は?
Service Catalogには大きく2つの利点があります。
- CloudFormationのテンプレートの管理が可能
- 環境を構築する権限がなくてもプロダクトを起動できる
CloudFormationのテンプレートの管理が可能
複数のCloudFormationテンプレートをポートフォリオとして、まとめて管理ができ、バージョン管理まで行えます。そのため常に最新のテンプレートを柔軟にエンドユーザに提供できます。
環境を構築する権限がなくてもプロダクトを起動できる
通常CloudFormationを起動するためには、テンプレートが提供するリソースを全て作成できる権限が必要になります。IAM Role付きのEC2を起動するためにはIAM権限が必要になります。そのため操作を誤ると環境を破壊できてしまいます。 しかし、Service Catalogの制約でLaunchを設定すると、ログインユーザに構築する権限がなくてもAWS環境一式を構築できます。これは運用統制上エンドユーザには直接CloudFormationを起動することを許可できない場合もあったと思います。Service CatalogでCloudFormationを起動することで安全にAWS環境を構築できるようになります。
Service Catalogの設定を行う
事前準備
エンドユーザ用のIAMユーザを作成します。使用するIAM PolicyはServiceCatalogEndUser
です。
ユーザ名はEngineer
としました。
ポートフォリオを作成する
ポートフォリオ(Portfolio)は、Service Catalogでエンドユーザが構築する構成情報の集まりです。エンドユーザの役割単位などで作成します。
項目 | 設定値 |
---|---|
Portfolio name | Engineering Tools |
Description | Sample portfolio that contains a single product. |
Owner | IT (it@example.com) |
プロダクトを作成する
プロダクト(Products)は、AWS上に構築するサービスのまとまりです。
ポートフォリオを作成した後の画面でProductsタグのUpload new product
をクリックします。
Step 1: Enter product details
プロダクトの詳細を記述します。例として以下の様に記載します。
項目 | 設定値 |
---|---|
Product name | Linux Desktop |
Short description | Cloud development environment. |
Description | Cloud development environment configured for engineering staff. Runs AWS Linux. |
Provided by | IT |
Vendor |
Step 2: Enter support details
エンドユーザのサポート先の情報を記載します。例として以下の様に記載します。
項目 | 設定値 | 備考 |
---|---|---|
Email contact | ITSupport@example.com | 問い合わせ先のメールアドレス |
Support link | https://wiki.example.com/IT/support | 問い合わせ情報があるWebサイトのURL |
Support description | Contact the IT department for issues deploying or connecting to this product. | サポートのコメント |
Step 3: Select package
構築する内容のCloudFormationテンプレートを登録します。
項目 | 設定値 | 備考 |
---|---|---|
Select template | https://awsdocs.s3.amazonaws.com/servicecatalog/development-environment.template | テンプレートをアップロードするかURLを指定します|本URLはService Catalogのサンプルテンプレート |
Version title | v1.0 | |
Description | Base Version |
Step 4: Review
プロダクトの内容を確認して、Confirm and upload
をクリックします。
制約を設定する
ポートフォリオに対して制約(Constraints)という物を設定します。制約にはLaunch
とTemplate
があり、Launch
はポートフォリを起動するIAM Roleを指定して、Template
は起動時のパラメータの内容を指定できます。
Template
まずは制約をTemplateで設定します。
Select product and type
で以下の内容を選択します。
項目 | 設定値 |
---|---|
Product | Linux Desktop |
Condtraint type | Template |
Template constraint builderでは、Description
にタイトルを記載して、Template constraint
に以下の内容を記載しました。
インスタンスタイプをt2.micro
とt2.small
に制限しています。
{ "Rules": { "Rule1": { "Assertions": [ { "Assert" : {"Fn::Contains": [["t2.micro", "t2.small"], {"Ref": "InstanceType"}]}, "AssertDescription": "Instance type should be t2.micro or t2.small" } ] } } }
TagタブとReviewタブは何も記述せずに進めます。
Launch
次は制約をLaunchで設定しますが、IAM Roleの作成が必要です。IAM Roleの作成から始めます。
IAM画面のRoles
でCreate New Role
をクリックします。
IAM Roleの名称をCatalogEndUserAdmin
とします。
Role TypeはAWS Service Roles
のAmazon EC2
を選択します。
アタッチするポリシーはAdministratorAccess
とします。
Review
で内容を確認してCreate Role
をクリックします。
次にService Catalogに対して、このRoleで実行できる設定を行います。
CatalogEndUserAdmin
Roleを選択して、一番下のEdit Trust Relationship
をクリックします。
Policyは以下のように、PrincipalでServiceにservicecatalog.us-west-2.amazonaws.com
とservicecatalog.us-east-1.amazonaws.com
を追加します。これでオレゴンとバージニアのService CatalogからRoleで実行できます。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "servicecatalog.us-west-2.amazonaws.com", "servicecatalog.us-east-1.amazonaws.com", "ec2.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
ここでService Catalogに戻ります。先ほどのポートフォリオの制約Upload new product
をクリックします。Select product and type
で以下の内容を選択します。
項目 | 設定値 |
---|---|
Product | Linux Desktop |
Condtraint type | Launch |
Launch constraint
で先ほど作成したRoleであるCatalogEndUserAdmin
を選択すします。
ユーザ、グループ、Roleの設定
事前準備で作成したIAMユーザEngineer
を選択します。
Service Catalogを使用する
Engineer
ユーザでManagement ConsoleへアクセスしてService Catalogの画面へ遷移します。
プロダクトLinux Desktop
を選択してLaunch product
をクリックします。
Nameにはcatalog-1
、バージョンは1つだけなのでv1.0
を選択します。
Server size
に起動するEC2のインスタンスタイプを設定します。制約で記述した通り、t2.micro
とt2.small
のみが選択可能です。
Key pair
にEC2に設定するKey pairを、CIDR range
にsshアクセスするアクセス元を設定します。
TagタブとReviewタブは何も記述せずに進めます。
しばらく待つと起動が完了してcatalog-1
がAvailableになりました。
起動したStackのOutputsに表示されているPublicIPAddress
に対して、sshでログインしてみます。
このようにログインできました。
$ ssh -i ./.aws/keypair/cm-oguri-XXXX-XXXX.pem ec2-user@XX.XX.XX.XX Warning: Permanently added 'XX.XX.XX.XX' (RSA) to the list of known hosts. __| __|_ ) _| ( / Amazon Linux AMI ___|\___|___| https://aws.amazon.com/amazon-linux-ami/2014.09-release-notes/ 28 package(s) needed for security, out of 129 available Run "sudo yum update" to apply all updates. Amazon Linux version 2015.03 is available. $
さいごに
CloudFormationで構築できるサービスであればService Catalogで管理ができるようになります。AWS管理者がCloudFormationを準備すれば、管理者が環境構築をせずにエンドユーザに任す運用も可能になると思います。ユーザ部門がオンデマンドで環境を用意できるので、よりアジリティがある運用が可能になるのではないでしょうか? 早く東京リージョンに来て欲しいです。